package br.com.translog.dao;

import br.com.translog.interfacee.IDAORastreamento;
import br.com.translog.modelo.SaidaEntrega;
import br.com.translog.modelo.EntradaEntrega;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;


public class DAORastreamento implements IDAORastreamento {
    
    private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("TranslogPU");

    private static EntityManager getEntityManager() {
        
        return emf.createEntityManager();
    }

    @Override
    public void atualizarRastreamento(SaidaEntrega ss, EntradaEntrega ee) {
        
        //Chamando o metodo que retornara o Factory junte com a criacao do EntityManager...
        EntityManager em = getEntityManager();
                
        try {
            //Abrindo uma conexao para realizacao da transacao...
            em.getTransaction().begin();
            //Atualizando os objetos...
            em.merge(ss);
            em.merge(ee);
            //Comitando a transacao...
            em.getTransaction().commit();
            
        } catch (Exception e) {
            //Desfazendo as alteracoes...
            em.getTransaction().rollback();
        } finally {
            //Fechando o EntityManager para liberar conexoes...
            em.close();
        }
    }

    
 @Override
    public SaidaEntrega consultaRastreamento(int codigoRastreioEntrega) {
        
        //Chamando o metodo que retornara o Factory junte com a criacao do EntityManager...
        EntityManager em;
        em = getEntityManager();
        SaidaEntrega ss = null;
        
        try {
            //Realizando a consulta...
            ss = (SaidaEntrega) em.createNamedQuery("SaidaEntrega.findByCodigoRastreioEntrega")
                    .setParameter("CodigoRastreioEntrega", codigoRastreioEntrega)
                    .getSingleResult();
            
        } catch (Exception e) {
           return null;      
        } finally {
            //Fechando o EntityManager para liberar conexoes...
            em.close();
        }
        
        return ss;
    }
}
